package com.kfm.am.exec;

import java.util.HashSet;

public class Exec03 {

    public static void main(String[] args) {
        // 给你一个整数数组 `nums` 和一个整数 `k` ，判断数组中是否存在两个 **不同的索引** `i` 和 `j` ，
        // 满足 `nums[i] == nums[j]` 且 `abs(i - j) <= k` 。如果存在，返回 `true` ；否则，返回 `false` 。
        int[] nums = {1, 2, 1, 2, 3};
        int k = 2;
        System.out.println(test(nums, k));
        // Set  add false
        // i 0 1 2
        // set 1 2 最多只存储k个元素
        // contains true  return true
        // contains false
        // add
        // set.size() > k   remove (nums[i - k])
                //
    }

    private static boolean test(int[] nums, int k) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] == nums[j] && Math.abs(i - j) <= k) {
                    return true;
                }
            }
        }
        return false;
    }

    private static boolean test02(int[] nums, int k) {
        HashSet<Integer> hashSet = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
//            if (hashSet.add(nums[i])) { // 添加成功 set集合还没有这个nums[i]
//                if (hashSet.size() > k) {
//                    hashSet.remove(nums[i - k]);
//                }
//            } else {
//                if (hashSet.size() <= k) {
//                    return true;
//                }
//            }
            // 1,2 ,1 ,2  2  1,2  1
            if (hashSet.contains(nums[i])) {
                if (hashSet.size() <= k) {
                    return true;
                }
            }
            hashSet.add(nums[i]);
            if (hashSet.size() > k) {
                hashSet.remove(nums[i - k]);
            }
        }
        return false;
    }
}
